package tech.aistar.day04.homework;

import tech.aistar.util.ArrayUtil;

import java.util.Arrays;

/**
 * 本类用来演示: 数组作业 - 随机打乱
 *
 * @author: success
 * @date: 2021/3/11 9:30 上午
 */
public class ArrayUpsetDemo {
    public static void main(String[] args) {
        int[] arr ={1,2,3,4,5};
        System.out.println(Arrays.toString(upset(arr)));
    }

    /**
     * 思路:
     *
     * int[] arr = {1,2,3,4,5};
     *
     * int[] temp ={0,0,0,0,0};
     *
     * 随机一个下标[0,arr.length-1]    -> 比如下标2->arr[2] = 3
     *
     * temp[0] = arr[2]  -> {2,0,0,0,0};
     *
     * 立即到原来的数组中 - 根据下标删除操作[返回一个新的数组对象]
     * arr = ArrayUtil.delByIndex(arr,2);
     * arr = {1,2,4,5};
     *
     *
     * 随机打乱一个数组
     * @param arr
     */
    public static int[] upset(int[] arr){
        //1. 确定一个新的数组
        int[] temp = new int[arr.length];
        //定义一个下标计数器
        int index = 0;

        while(true){
            //1. 随机一个下标
            int pos = (int) (Math.random()*arr.length);//[0,arr.length-1];
            temp[index++] = arr[pos];
            //2. 立即根据下标进行删除操作,
            //并且将新的数组的地址重新赋值给arr
            arr = ArrayUtil.delByIndex(arr,pos);

            //判断循环退出的条件
            if(arr.length==0)
                break;
        }
        return temp;
    }
}
